//
// Created by denglibin on 2021/4/2 0002.
//

#ifndef OPENGL_MINGW_GL_OBJECT_H
#define OPENGL_MINGW_GL_OBJECT_H
#include <glad/glad.h>
/**
 * 创建VBO,顶点缓冲对象
 * 它会在GPU内存(通常被称为显存)中储存大量顶点。使用这些缓冲对象的好处是我们可以一次性的发送一大批数据到显卡上，
 * 而不是每个顶点发送一次。从CPU把数据发送到显卡相对较慢，所以只要可能我们都要尝试尽量一次性发送尽可能多的数据。
 * 当数据发送至显卡的内存中后，顶点着色器几乎能立即访问顶点，这是个非常快的过程。
 * 顶点缓冲对象是我们在OpenGL教程中第一个出现的OpenGL对象。就像OpenGL中的其它对象一样，这个缓冲有一个独一无二的ID，
 * 所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象
 */
GLuint createVBO(float vertices[], int arrLen);
/**
 *顶点数组对象(Vertex Array Object, VAO)可以像顶点缓冲对象那样被绑定，任何随后的顶点属性调用都会储存在这个VAO中。
 * 这样的好处就是，当配置顶点属性指针时，你只需要将那些调用执行一次，之后再绘制物体的时候只需要绑定相应的VAO就行了。
 * 这使在不同顶点数据和属性配置之间切换变得非常简单，只需要绑定不同的VAO就行了
 */
GLuint createVAO();

/**
 * 创建索引缓冲对象 EBO
 * @return
 */
GLuint createEBO(unsigned int indices[], int arrLen);

/**
 * 创建纹理对象
 * @param imgPath
 * @param format 源图的格式
 * @param glFormat 告诉OpenGL我们希望把纹理储存为何种格式
 * @return
 */
GLuint createTexture(const char* imgPath, int format, int glFormat);


#endif //OPENGL_MINGW_GL_OBJECT_H
